package coc.core;

import java.io.Serializable;
import java.util.Collection;

import coc.core.url.Url;

/**
 * 蜘蛛采集结果。
 */
public class SpiderResult implements Serializable {
	/** 任务ID */
	private String taskId;
	/** 任务名称 */
	private String taskName;
	/** 当前处理的URL */
	private Url url;
	/** 采集数据 */
	private Object data;

	/**
	 * 设置采集数据。
	 * 
	 * @param data
	 *            采集数据
	 */
	public void setData(Object data) {
		// 如果是Data类型数据则进行数据验证
		if (data instanceof Data) {
			if (((Data) data).isValid()) {
				this.data = data;
			}
		} else {
			this.data = data;
		}
	}

	/**
	 * 获取采集数据数量。
	 * 
	 * @return 返回采集数据数量。
	 */
	public Integer getDataSize() {
		if (data == null) {
			return 0;
		}
		if (data instanceof Collection) {
			return ((Collection<?>) data).size();
		}
		return 1;
	}

	/**
	 * 是否采集到了有效数据。
	 * 
	 * @return 如果采集到了有效数据返回true，否则返回false。
	 */
	public Boolean hasValidData() {
		return getDataSize() > 0;
	}

	public String getTaskId() {
		return taskId;
	}

	public void setTaskId(String taskId) {
		this.taskId = taskId;
	}

	public String getTaskName() {
		return taskName;
	}

	public void setTaskName(String taskName) {
		this.taskName = taskName;
	}

	public Url getUrl() {
		return url;
	}

	public void setUrl(Url url) {
		this.url = url;
	}

	public Object getData() {
		return data;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("[" + url + "]");
		builder.append("[" + url.getDepth() + "]");
		builder.append("[");
		builder.append(" 采集记录数: " + getDataSize());
		builder.append("]");
		return builder.toString();
	}
}
